/*
 * Implementa operaciones SQL genéricas
 */
package grest.controller;
import grest.model.*;
/**
 *
 * @author Santiago, Rodrigo,Agustín
 */
public class SQLOp {
    /**
     * Inserta simplemente una tupla en una tabla
     * @param tuplaAInsert 
     */
    public static void insertar(Entidad tuplaAInsert){
        if(DataIO.executeQuery(tuplaAInsert.getInsertQuery())){
            System.out.println("acción: " + tuplaAInsert.getInsertQuery());
            DataIO.doCommit();
        }
    }
    /**
     * Inserta una tupla en una tabla y notifica al model de la acción
     * @param tuplaAInsert
     * @param model 
     */
    public static void insertar(Entidad tuplaAInsert, TableModelABM model){
        if(DataIO.executeQuery(tuplaAInsert.getInsertQuery())){
            System.out.println("ejecuto: " + tuplaAInsert.getInsertQuery());
            DataIO.doCommit();
            model.getModel().add(tuplaAInsert);
            model.fireTableDataChanged();
        }
    }
    /**
     * Actualiza a una tupla en particular
     * @param tupla 
     */
    public static void actualizar(Entidad tupla){
        if(tupla.isChanged()){
            System.out.println("acción: " + tupla.getUpdateQuery());
            tupla.setChanged(false);
            System.out.println("acción: " + tupla.getUpdateQuery());            
        }
        
    }
    /**
     * Actualiza todas las tuplas modificadas de un
     * AbstractTableModel
     * @param model 
     */
    public static void actualizar(TableModelABM model) {
        for(Entidad tupla : model.getModel()){
            if(tupla.isChanged()){
                actualizar(tupla);
            }
        }
        DataIO.doCommit();
        System.out.println("ejecuto: COMMIT");
        model.fireTableDataChanged();;
    }
    /**
     * Elimina una tupla en particular
     * @param tupla 
     */
    public static void eliminar(Entidad tupla){
        if(DataIO.executeQuery(tupla.getDeleteQuery())){
            System.out.println("acción: "+tupla.getDeleteQuery());
            DataIO.doCommit();
        }
    }
    /**
     * Elimina una tupla y avisa del cambio
     */
    public static void eliminar(int fila, TableModelABM model){
        if(fila!=-1){
            Entidad tupla = model.getModel().get(fila);
            if(DataIO.executeQuery(tupla.getDeleteQuery())){
                System.out.println("acción: "+tupla.getDeleteQuery());
                DataIO.doCommit();
                model.getModel().remove(tupla);
                model.fireTableRowsDeleted(fila, fila);            
            }
        }
    }
            
}
